#include "BulletSoftBody/btDeformableNeoHookeanForce.h"
#ifdef __cplusplus
extern "C" {
#endif
btDeformableNeoHookeanForce* bullet_NewbtDeformableNeoHookeanForce(){
	btDeformableNeoHookeanForce* wrap_out = new btDeformableNeoHookeanForce();
	return wrap_out;
}

btDeformableNeoHookeanForce* bullet_NewbtDeformableNeoHookeanForce1(double mu,double lambda,double damping){
	btScalar c_arg_mu=mu;
	btScalar c_arg_lambda=lambda;
	btScalar c_arg_damping=damping;
	btDeformableNeoHookeanForce* wrap_out = new btDeformableNeoHookeanForce(c_arg_mu,c_arg_lambda,c_arg_damping);
	return wrap_out;
}

void bullet_btDeformableNeoHookeanForce_addScaledCofactorMatrixDifferential(btDeformableNeoHookeanForce* c_this,btMatrix3x3* F,btMatrix3x3* dF,double scale,btMatrix3x3* M){
	btMatrix3x3 const& c_arg_F=(btMatrix3x3 const&)(*F);
	btMatrix3x3 const& c_arg_dF=(btMatrix3x3 const&)(*dF);
	btScalar c_arg_scale=scale;
	btMatrix3x3& c_arg_M=(btMatrix3x3&)(*M);
	c_this->addScaledCofactorMatrixDifferential(c_arg_F,c_arg_dF,c_arg_scale,c_arg_M);
}

double bullet_btDeformableNeoHookeanForce_DotProduct(btDeformableNeoHookeanForce* c_this,btMatrix3x3* A,btMatrix3x3* B){
	btMatrix3x3 const& c_arg_A=(btMatrix3x3 const&)(*A);
	btMatrix3x3 const& c_arg_B=(btMatrix3x3 const&)(*B);
	btScalar c_out = c_this->DotProduct(c_arg_A,c_arg_B);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btDeformableNeoHookeanForce_elasticEnergyDensity(btDeformableNeoHookeanForce* c_this,btSoftBody::TetraScratch* s){
	btSoftBody::TetraScratch const& c_arg_s=(btSoftBody::TetraScratch const&)(*s);
	double c_out = c_this->elasticEnergyDensity(c_arg_s);
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btDeformableNeoHookeanForce_firstPiola(btDeformableNeoHookeanForce* c_this,btSoftBody::TetraScratch* s,btMatrix3x3* P){
	btSoftBody::TetraScratch const& c_arg_s=(btSoftBody::TetraScratch const&)(*s);
	btMatrix3x3& c_arg_P=(btMatrix3x3&)(*P);
	c_this->firstPiola(c_arg_s,c_arg_P);
}

void bullet_btDeformableNeoHookeanForce_firstPiolaDampingDifferential(btDeformableNeoHookeanForce* c_this,btSoftBody::TetraScratch* s,btMatrix3x3* dF,btMatrix3x3* dP){
	btSoftBody::TetraScratch const& c_arg_s=(btSoftBody::TetraScratch const&)(*s);
	btMatrix3x3 const& c_arg_dF=(btMatrix3x3 const&)(*dF);
	btMatrix3x3& c_arg_dP=(btMatrix3x3&)(*dP);
	c_this->firstPiolaDampingDifferential(c_arg_s,c_arg_dF,c_arg_dP);
}

void bullet_btDeformableNeoHookeanForce_firstPiolaDifferential(btDeformableNeoHookeanForce* c_this,btSoftBody::TetraScratch* s,btMatrix3x3* dF,btMatrix3x3* dP){
	btSoftBody::TetraScratch const& c_arg_s=(btSoftBody::TetraScratch const&)(*s);
	btMatrix3x3 const& c_arg_dF=(btMatrix3x3 const&)(*dF);
	btMatrix3x3& c_arg_dP=(btMatrix3x3&)(*dP);
	c_this->firstPiolaDifferential(c_arg_s,c_arg_dF,c_arg_dP);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_E(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_E);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_lambda(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_lambda);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_lambda_damp(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_lambda_damp);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_mu(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_mu);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_mu_damp(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_mu_damp);
}

double bullet_btDeformableNeoHookeanForce_GetFieldOfM_nu(btDeformableNeoHookeanForce* c_this){
	return (double)(c_this->m_nu);
}

void bullet_btDeformableNeoHookeanForce_setDamping(btDeformableNeoHookeanForce* c_this,double damping){
	btScalar c_arg_damping=damping;
	c_this->setDamping(c_arg_damping);
}

void bullet_btDeformableNeoHookeanForce_setLameParameters(btDeformableNeoHookeanForce* c_this,double mu,double lambda){
	btScalar c_arg_mu=mu;
	btScalar c_arg_lambda=lambda;
	c_this->setLameParameters(c_arg_mu,c_arg_lambda);
}

void bullet_btDeformableNeoHookeanForce_setPoissonRatio(btDeformableNeoHookeanForce* c_this,double nu){
	btScalar c_arg_nu=nu;
	c_this->setPoissonRatio(c_arg_nu);
}

void bullet_btDeformableNeoHookeanForce_setYoungsModulus(btDeformableNeoHookeanForce* c_this,double E){
	btScalar c_arg_E=E;
	c_this->setYoungsModulus(c_arg_E);
}

void bullet_btDeformableNeoHookeanForce_updateLameParameters(btDeformableNeoHookeanForce* c_this){
	c_this->updateLameParameters();
}

void bullet_btDeformableNeoHookeanForce_updateYoungsModulusAndPoissonRatio(btDeformableNeoHookeanForce* c_this){
	c_this->updateYoungsModulusAndPoissonRatio();
}

#ifdef __cplusplus
}
#endif
